3.5.3 计算频率
频率计算 采用过零检测法,即通过测量信号波形相邻过零点之间的时间间隔来确定信号的频率。该方法假设信号是周期性的,因此两个相邻过零点之间的间隔即为信号的周期T,而频率f则等于1/T。
1.过零检测的基本原理
过零检测通过定时器中断计数来测量周期T。具体而言,周期T等于两个过零点间的采样点间隔除以定时器中断频率(本例中为20kHz)。因此,频率f可以通过以下公式计算得出:
2.计算频率的步骤
1)遍历ADC数据:查找过零点,记录第一个过零点的位置,并计算后续过零点之间的间隔。
for (uint32_t i = 2; i < 239; i++) {
if ((adc_data_raw[i+1] > 2048 && adc_data_raw[i - 1] <= 2048) &&
(adc_data_raw[i+2] > 2048 && adc_data_raw[i - 2] <= 2048)) {
if (rise_flag == 0) {
zero_crossing_count = i; // 记录第一个过零点的位置
rise_flag = 1; // 设置标志位
i += 5; // 跳过几个点,避免重复检测
} else {
interval = i - zero_crossing_count; // 计算两个过零点之间的间隔
break; // 找到第二个过零点后退出循环
}
}
}
2)过零点判断条件
adc_data_raw[i+1] > 2048 && adc_data_raw[i - 1] <= 2048:判断当前点是否从负半轴过渡到正半轴。adc_data_raw[i+2] > 2048 && adc_data_raw[i - 2] <= 2048:进一步确认过零点的稳定性,避免误判。- 2048:这是ADC的中点值,表示0V。在12位ADC中,2048对应于3.3V的一半。
3)计算频率
找到两个过零点之间的间隔后,代码通过上述公式计算频率:
3.计算频率流程
- 采集ADC数据:通过定时器中断采集信号的ADC值。
- 过零检测:通过查找信号从负半轴过渡到正半轴的点,确定过零点。
- 计算周期:通过测量两个过零点之间的采样点间隔,计算信号的周期。
- 计算频率:根据周期和定时器中断频率,计算信号的频率。
- 显示结果:将计算得到的频率值显示在LCD屏幕上。
通过以上步骤,我们可以准确地测量并显示输入信号的波形、峰峰值和频率等参数。